/**
 * @file utils.c
 * @brief 工具函数库，提供各种通用功能
 */

 #include "utils.h"

 /**
  * @brief 在位标志数组中设置指定位置的标志
  * 
  * @param array 位标志数组
  * @param pos 要设置的位的位置
  */
 void setFlag(uint32_t* array, uint16_t pos) {
     array[pos / 32] |= (1u << (pos % 32));
 }
 
 /**
  * @brief 在位标志数组中清除指定位置的标志
  * 
  * @param array 位标志数组
  * @param pos 要清除的位的位置
  */
 void clearFlag(uint32_t* array, uint16_t pos) {
     array[pos / 32] &= ~(1u << (pos % 32));
 }
 
 /**
  * @brief 检查位标志数组中指定位置的标志是否被设置
  * 
  * @param array 位标志数组
  * @param pos 要检查的位的位置
  * @return uint8_t 如果标志被设置则返回1，否则返回0
  */
 uint8_t checkFlag(uint32_t* array, uint16_t pos) {
     return (array[pos / 32] & (1u << (pos % 32))) != 0;
 }
 
 /**
  * @brief 在位标志数组中切换指定位置的标志状态
  * 
  * @param array 位标志数组
  * @param pos 要切换的位的位置
  */
 void toggleFlag(uint32_t* array, uint16_t pos) {
     array[pos / 32] ^= (1u << (pos % 32));
 }